package com.supply.dl.activity.seachmode;

import android.content.Context;
import android.support.v4.util.ArrayMap;

import com.supply.dl.app.adapter.NormalAdapter;

import java.util.List;

/**
 * 搜索模块的抽象接口
 * <p>
 * Author: tian <br>
 * Time: 2018/4/28 10:32
 * <p>
 * note: 2018/7/24 因为筛选中 存在多个多选条件，进行改变这里
 */
public abstract class ISearchModle<T> {

    protected List<T> resource;
    protected NormalAdapter<T> adapter;
    protected Context context;
    protected String titleShow;

    boolean hasMoreData = true;
    int pageNum = 1;
    protected OnResultListener resultListener = null;

    /**
     * 搜索框提示文本
     */
    protected String hintText = "搜索提示";

    /**
     * 界面标识
     */
    protected int mActivityFlag=-1;


    /**
     * 设置adapter，点击时间，列表item布局的样式
     *
     * @return
     */
    public abstract void setSearchAdapter();

    /**
     * 设置隐藏文本显示
     */
    public abstract void setHintText();

    /**
     * 设置页面显示的标题
     *
     * @return
     */
    public abstract void setTitleShow();

    /**
     * 设置当前 Modle和actiivty进行关联
     *
     * @param context
     * @return
     */
    public abstract void init(Context context);

    /**
     * 是否还有更多数据
     * @return
     */
    public boolean hasMoreData(){
        return hasMoreData;
    };

    /**
     * 增加页面
     */
    public void increasePage(){
        pageNum++;
    };

    /**
     * 恢复页面
     */
    public void revertPage(){
        hasMoreData = true;
        pageNum = 1;
    };

    public void setOnResultListener(OnResultListener listener){
        this.resultListener = listener;
    };

    /**
     * 设置activity跳转前的标识
     * @param activityFlag
     */
    public int setActivityFlag(int activityFlag){
        this.mActivityFlag=activityFlag;
        return mActivityFlag;
    }

    public String getResourcesString(int resId) {
        return context.getResources().getString(resId);
    }


    /**
     * 访问数据
     *
     * @param keyWord           关键字
     * @param filterMap         用户选择的 例如 多个公司的id，多个工厂的id，多个车间的id,以及 用户选择的 时间 例如 建单起点时间，建单结束时间，预约时间
     * @param onVistDataSuccess
     */
    public abstract void vistData(String keyWord, ArrayMap<String, String> filterMap, OnVistDataSuccess onVistDataSuccess);


    public List<T> getResource() {
        return resource;
    }

    public void setResource(List<T> resource) {
        this.resource = resource;
    }

    public NormalAdapter<T> getAdapter() {
        return adapter;
    }

    public void setAdapter(NormalAdapter<T> adapter) {
        this.adapter = adapter;
    }

    public Context getContext() {
        return context;
    }

    public String getTitleShow() {
        return titleShow;
    }

    public String getHintText() {
        return hintText;
    }

    /**
     * 提供的一个回调接口，用于调用者变更UI
     */
    public interface OnVistDataSuccess {

        /**
         * 更加是否有数据，进行UI的变更
         *
         * @param hasData
         */
        void showUi(boolean hasData);


    }

    /**
     * 数据返回接口，是否加载完成
     */
    public interface OnResultListener{
        void onResult();
    }


}
